#define _CRT_SECURE_NO_WARNINGS 1

//#include <iostream>
//using namespace std;
//
//class parent 
//{
//	int i;
//protected:
//	int x;
//public:
//	parent() { x = 0; i = 0; }
//	void change() { x++; i++; }
//	void display();
//};
//
//class son :public parent 
//{
//public:
//	void modify();
//};
//
//void parent::display() 
//{
//	cout << "x=" << x << endl;
//}
//
//void son::modify() 
//{
//	x++;
//}

//int main() 
//{
//	son A;
//	parent B;
//	A.display();
//	A.change();
//	A.modify();
//	A.display();
//	B.change();
//	B.display();
//	return 0;
//}

//
//#include<iostream>
//using namespace std;
//class B
//{
//public:
//	B()
//	{
//		cout << "default constructor" << " ";
//	}
//
//	~B()
//	{
//		cout << "destructed" << " ";
//	}
//
//	B(int i) : data(i)
//	{
//		cout << "constructed by parameter" << data << " ";
//	}
//private: int data;
//};

//B Play(B b)
//{
//	return b;
//}

//int main(int argc, char* argv[])
//{
//	B temp = Play(5);
//	return 0;
//}

//#include <iostream>
//using namespace std;
//class A
//{
//public:
//	virtual void print()
//	{
//		cout << "A::print()" << "\n";
//	}
//};
//
//class B : public A
//{
//public: virtual void print()
//{
//	cout << "B::print()" << "\n";
//}
//};

//class C : public A
//{
//public: virtual void print()
//{
//	cout << "C::print()" << "\n";
//}
//};
//
//void print(A a)
//{
//	a.print();
//}

//int main()
//{
//	A a, * aa, * ab, * ac;
//	B b;
//	C c;
//	aa = &a;
//	ab = &b;
//	ac = &c;
//
//	a.print();
//	b.print();
//	c.print();
//
//	aa->print();
//	ab->print();
//	ac->print();
//
//	print(a);
//	print(b);
//	print(c);
//}

#include<iostream>
#include<string>
using namespace std;

class B0 
{
public:
	virtual void display() 
	{
		cout << "B0::display0" << endl;
	}
};

class B1 :public B0 
{
public:
	void display() { cout << "B1::display0" << endl; }
};

class D1 : public B1 
{
public:
	void display() 
	{
		cout << "D1::display0" << endl;
	}
};
//
//void fun(B0 ptr) 
//{
//	ptr.display();
//}

//int main() 
//{
//	B0 b0;
//	B1 b1;
//	D1 d1;
//	fun(b0);
//	fun(b1);
//	fun(d1);
//}

#include<iostream>
using namespace std;

//class A 
//{
//public: A(const char* s) { cout << s << endl; } ~A() {}
//};
//
//class B : virtual public A 
//{
//public: B(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
//};
//
//class C : virtual public A 
//{
//public: C(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
//};

//class D : public B, public C 
//{
//public: D(const char* s1, const char* s2, const char* s3, const char* s4) :B(s1, s2), C(s1, s3), A(s1)
//{
//	cout << s4 << endl;
//}
//};

//int main() 
//{
//	D* p = new D("class A", "class B", "class C", "class D"); delete p; return 0;
//}

//class A
//{
//public:
//	virtual void func(int val = 1)
//	{
//		std::cout << "A->" << val << std::endl;
//	}
//
//	virtual void test()
//	{
//		func();
//	}
//};
//
//class B : public A
//{
//public:
//	void func(int val = 0) { std::cout << "B->" << val << std::endl; }
//};

//int main(int argc, char* argv[])
//{
//	B* p = new B;
//	p->test();
//	return 0;
//}


//class A
//{
//public:
//	void foo()
//	{
//		printf("1");
//	}
//	virtual void fun()
//	{
//		printf("2");
//	}
//};
//class B : public A
//{
//public:
//	void foo()
//	{
//		printf("3");
//	}
//	void fun()
//	{
//		printf("4");
//	}
//};
//int main(void)
//{
//	A a;
//	B b;
//	A* p = &a;
//
//	p->foo();
//	p->fun();
//
//	p = &b;
//	p->foo();
//	p->fun();
//
//	A* ptr = (A*)&b;
//	ptr->foo();
//	ptr->fun();
//	return 0;
//}

class A
{
public:
	A()
	{
		printf("A ");
	}
	~A()
	{
		printf("deA ");
	}
};

class B
{
public:
	B()
	{
		printf("B ");
	}
	~B()
	{
		printf("deB ");
	}
};

class C : public A, public B
{
public:
	C()
	{
		printf("C ");
	}
	~C()
	{
		printf("deC ");
	}
};

//int main()
//{
//	A* a = new C();
//	delete a;
//	return 0;
//}

#include <iostream>
class Base 
{
public:
	int Bar(char x) 
	{
		return (int)(x);
	}

	virtual int Bar(int x) 
	{
		return (2 * x);
	}
};

class Derived : public Base 
{
public:
	int Bar(char x) 
	{
		return (int)(-x);
	}

	int Bar(int x) 
	{
		return (x / 2);
	}
};

//int main(void) 
//{
//	Derived Obj;
//	Base* pObj = &Obj;
//	printf("%d,", pObj->Bar((char)(100)));
//	printf("%d,", pObj->Bar(100));
//}


//class Test 
//{
//public:
//	int a;
//	int b;
//	virtual void fun() {}
//	Test(int temp1 = 0, int temp2 = 0)
//	{
//		a = temp1;
//		b = temp2;
//	}
//
//	int getA()
//	{
//		return a;
//	}
//
//	int getB()
//	{
//		return b;
//	}
//};

//int main()
//{
//	Test obj(5, 10);
//	// Changing a and b
//	int* pInt = (int*)&obj;
//
//	*(pInt + 0) = 100;
//	*(pInt + 1) = 200;
//	cout << "a = " << obj.getA() << endl;
//	cout << "b = " << obj.getB() << endl;
//	return 0;
//}
//
//#include <iostream>
//using namespace std;
//
//class A
//{
//public:
//	void print()
//	{
//		cout << "A:print()";
//	}
//};

//class B : private A
//{
//public:
//	void print()
//	{
//		cout << "B:print()";
//	}
//};
//
//class C : public B
//{
//public:
//	void print()
//	{
//		A::print();
//	}
//};
//
//int main()
//{
//	C b;
//	b.print();
//}

//class A
//{
//public:
//	void FuncA()
//	{
//		printf("FuncA called\n");
//	}
//	virtual void FuncB()
//	{
//		printf("FuncB called\n");
//	}
//};
//
//class B : public A
//{
//public:
//	void FuncA()
//	{
//		A::FuncA();
//		printf("FuncAB called\n");
//	}
//
//	virtual void FuncB()
//	{
//		printf("FuncBB called\n");
//	}
//};

//void main(void)
//{
//	B b;
//	A* pa;
//	pa = &b;
//	A* pa2 = new A;
//	pa->FuncA();
//	pa->FuncB(); 
//
//	pa2->FuncA(); 
//	pa2->FuncB();
//	delete pa2;
//}

//#include<iostream>
//using namespace std;
//
//class Base
//{
//public:
//	virtual int foo(int x)
//	{
//		return x * 10;
//	}
//
//	int foo(char x[14])
//	{
//		return sizeof(x) + 10;
//	}
//};
//
//class Derived : public Base
//{
//	int foo(int x)
//	{
//		return x * 20;
//	}
//
//	virtual int foo(char x[10])
//	{
//		return sizeof(x) + 20;
//	}
//};

//int main()
//{
//	Derived stDerived;
//	Base* pstBase = &stDerived;
//	char x[10];
//	printf("%d\n", pstBase->foo(100) + pstBase->foo(x));
//	return 0;
//}


#include <iostream>
#include <vector>
using namespace std;

int main(void)
{
	vector<int>array;
	array.push_back(100);
	array.push_back(300);
	array.push_back(300);
	array.push_back(300);
	array.push_back(300);
	array.push_back(500);
	vector<int>::iterator itor;

	for (itor = array.begin(); itor != array.end(); itor++)
	{
		if (*itor == 300)
		{
			itor = array.erase(itor);
		}
	}

	for (itor = array.begin(); itor != array.end(); itor++)
	{
		cout << *itor << " ";
	}
	return 0;
}

//class A 
//{
//public:
//	A() { p(); }
//	virtual void p() { printf("A"); }
//	virtual ~A() { p(); }
//};
//
//class B :public A 
//{
//public:
//	B() { p(); }
//	void p() { printf("B"); }
//	~B() { p(); }
//};
//
//int main(int, char**) 
//{
//	A* a = new B();
//	delete a;
//}

//class Base 
//{
//public:
//	Base() 
//	{
//		echo();
//	}
//	virtual void echo() 
//	{
//		printf("Base");
//	}
//};
//
//class Derived :public Base 
//{
//public:
//	Derived() 
//	{
//		echo();
//	}
//
//	virtual void echo() 
//	{
//		printf("Derived");
//	}
//};

//int main()
//{
//	Base* base = new Derived();
//	base->echo();
//	return 0;
//}